尚硅谷 Dubbo 雷丰阳讲义 boot-order-service-consumer 1 2 3 4 5 6 7 8 9 10 11 12 13 @Controller public class OrderController { @Autowired OrderService orderService; @ResponseBody @RequestMapping ("/initOrder" ) public List<UserAddress> initOrder (@RequestParam("uid" ) String userId) { return orderService.initOrder(userId); } }
1 2 3 4 5 6 7 8 9 @EnableDubbo @EnableHystrix @SpringBootApplication public class BootOrderServiceConsumerApplication { public static void main (String[] args) { SpringApplication.run(BootOrderServiceConsumerApplication.class, args); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 @Service public class OrderServiceImpl implements OrderService { @Reference (loadbalance="random" ,timeout=1000 ) UserService userService; @HystrixCommand (fallbackMethod="hello" ) @Override public List<UserAddress> initOrder (String userId) { System.out.println("用户id:" +userId); List<UserAddress> addressList = userService.getUserAddressList(userId); return addressList; } public List<UserAddress> hello (String userId) { return Arrays.asList(new UserAddress(10 , "测试地址" , "1" , "测试" , "测试" , "Y" )); } }
1 2 3 4 5 server.port=8081 dubbo.application.name=boot-order-service-consumer dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.monitor.protocol=registry
boot-user-service-provider 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 @Configuration public class MyDubboConfig { @Bean public ApplicationConfig applicationConfig () { ApplicationConfig applicationConfig = new ApplicationConfig(); applicationConfig.setName("boot-user-service-provider" ); return applicationConfig; } @Bean public RegistryConfig registryConfig () { RegistryConfig registryConfig = new RegistryConfig(); registryConfig.setProtocol("zookeeper" ); registryConfig.setAddress("127.0.0.1:2181" ); return registryConfig; } @Bean public ProtocolConfig protocolConfig () { ProtocolConfig protocolConfig = new ProtocolConfig(); protocolConfig.setName("dubbo" ); protocolConfig.setPort(20882 ); return protocolConfig; } @Bean public ServiceConfig<UserService> userServiceConfig (UserService userService) { ServiceConfig<UserService> serviceConfig = new ServiceConfig<>(); serviceConfig.setInterface(UserService.class); serviceConfig.setRef(userService); serviceConfig.setVersion("1.0.0" ); MethodConfig methodConfig = new MethodConfig(); methodConfig.setName("getUserAddressList" ); methodConfig.setTimeout(1000 ); List<MethodConfig> methods = new ArrayList<>(); methods.add(methodConfig); serviceConfig.setMethods(methods); return serviceConfig; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 @EnableDubbo (scanBasePackages="com.atguigu.gmall" )@EnableHystrix @SpringBootApplication public class BootUserServiceProviderApplication { public static void main (String[] args) { SpringApplication.run(BootUserServiceProviderApplication.class, args); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 @Service @Component public class UserServiceImpl implements UserService { @HystrixCommand @Override public List<UserAddress> getUserAddressList (String userId) { System.out.println("UserServiceImpl..3....." ); UserAddress address1 = new UserAddress(1 , "北京市昌平区宏福科技园综合楼3层" , "1" , "李老师" , "010-56253825" , "Y" ); UserAddress address2 = new UserAddress(2 , "深圳市宝安区西部硅谷大厦B座3层(深圳分校)" , "1" , "王老师" , "010-56253825" , "N" ); if (Math.random()>0.5 ) { throw new RuntimeException(); } return Arrays.asList(address1,address2); } }
1 2 3 4 5 6 7 #dubbo.application.name=user-service-provider #dubbo.registry.address=127.0.0.1:2181 #dubbo.registry.protocol=zookeeper #dubbo.protocol.name=dubbo ##dubbo.protocol.port=20881 #dubbo.monitor.protocol=registry ##dubbo.scan.base-packages=com.atguigu.gmall
1 dubbo.protocol.port=20882
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 1、指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名) --> <dubbo:application name="boot-user-service-provider"></dubbo:application> <!-- 2、指定注册中心的位置 --> <!-- <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry> --> <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry> <!-- 3、指定通信规则(通信协议?通信端口) --> <dubbo:protocol name="dubbo" port="20882"></dubbo:protocol> <!-- 4、暴露服务 ref:指向服务的真正的实现对象 --> <dubbo:service interface="com.atguigu.gmall.service.UserService" ref="userServiceImpl01" timeout="1000" version="1.0.0"> <dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method> </dubbo:service> <!--统一设置服务提供方的规则 --> <dubbo:provider timeout="1000"></dubbo:provider> <!-- 服务的实现 --> <bean id="userServiceImpl01" class="com.atguigu.gmall.service.impl.UserServiceImpl"></bean> <!-- 连接监控中心 --> <dubbo:monitor protocol="registry"></dubbo:monitor> </beans>
gmall-interface 1 2 3 4 5 6 7 8 public class UserAddress implements Serializable { private Integer id; private String userAddress; private String userId; private String consignee; private String phoneNum; private String isDefault;
1 2 3 4 5 6 7 8 9 public interface OrderService { /** * 初始化订单 * @param userId */ public List<UserAddress> initOrder(String userId); }
1 2 3 4 5 6 7 8 9 10 11 12 13 /** * 用户服务 */ public interface UserService { /** * 按照用户id返回所有的收货地址 * @param userId * @return */ public List<UserAddress> getUserAddressList(String userId); }
order-service-consumer 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class MainApplication { @SuppressWarnings("resource") public static void main(String[] args) throws IOException { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("consumer.xml"); OrderService orderService = applicationContext.getBean(OrderService.class); orderService.initOrder("1"); System.out.println("调用完成...."); System.in.read(); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 @Service public class OrderServiceImpl implements OrderService { @Autowired UserService userService; @Override public List<UserAddress> initOrder (String userId) { System.out.println("用户id:" +userId); List<UserAddress> addressList = userService.getUserAddressList(userId); for (UserAddress userAddress : addressList) { System.out.println(userAddress.getUserAddress()); } return addressList; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns ="http://www.springframework.org/schema/beans" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo ="http://dubbo.apache.org/schema/dubbo" xmlns:context ="http://www.springframework.org/schema/context" xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd" > <context:component-scan base-package ="com.atguigu.gmall.service.impl" > </context:component-scan > <dubbo:application name ="order-service-consumer" > </dubbo:application > <dubbo:registry address ="zookeeper://127.0.0.1:2181" > </dubbo:registry > <dubbo:reference interface ="com.atguigu.gmall.service.UserService" id ="userService" timeout ="5000" retries ="3" version ="*" > </dubbo:reference > <dubbo:consumer check ="false" timeout ="5000" > </dubbo:consumer > <dubbo:monitor protocol ="registry" > </dubbo:monitor > </beans >
user-service-provider 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class UserServiceImpl implements UserService { @Override public List<UserAddress> getUserAddressList(String userId) { System.out.println("UserServiceImpl.....old..."); // TODO Auto-generated method stub UserAddress address1 = new UserAddress(1, "北京市昌平区宏福科技园综合楼3层", "1", "李老师", "010-56253825", "Y"); UserAddress address2 = new UserAddress(2, "深圳市宝安区西部硅谷大厦B座3层(深圳分校)", "1", "王老师", "010-56253825", "N"); /*try { Thread.sleep(4000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }*/ return Arrays.asList(address1,address2); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 public class UserServiceImpl2 implements UserService { @Override public List<UserAddress> getUserAddressList(String userId) { System.out.println("UserServiceImpl.....new..."); // TODO Auto-generated method stub UserAddress address1 = new UserAddress(1, "北京市昌平区宏福科技园综合楼3层", "1", "李老师", "010-56253825", "Y"); UserAddress address2 = new UserAddress(2, "深圳市宝安区西部硅谷大厦B座3层(深圳分校)", "1", "王老师", "010-56253825", "N"); return Arrays.asList(address1,address2); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 public class UserServiceStub implements UserService { private final UserService userService{ /* * 传入的是userService远程的代理对象 * @param userService */ public UserServiceStub(UserService userService) { super(); this.userService = userService; } @Override public List<UserAddress> getUserAddressList(String userId) { // TODO Auto-generated method stub System.out.println("UserServiceStub....."); if(!StringUtils.isEmpty(userId)) { return userService.getUserAddressList(userId); } return null; } }
1 2 3 4 5 6 7 8 9 10 public class MainApplication { public static void main(String[] args) throws IOException { ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("provider.xml"); ioc.start(); System.in.read(); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 1、指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名) --> <dubbo:application name="user-service-provider"></dubbo:application> <!-- 2、指定注册中心的位置 --> <!-- <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry> --> <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry> <!-- 3、指定通信规则(通信协议?通信端口) --> <dubbo:protocol name="dubbo" port="20882"></dubbo:protocol> <!-- 4、暴露服务 ref:指向服务的真正的实现对象 --> <dubbo:service interface="com.atguigu.gmall.service.UserService" ref="userServiceImpl01" timeout="1000" version="1.0.0"> <dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method> </dubbo:service> <!--统一设置服务提供方的规则 --> <dubbo:provider timeout="1000"></dubbo:provider> <!-- 服务的实现 --> <bean id="userServiceImpl01" class="com.atguigu.gmall.service.impl.UserServiceImpl"></bean> <dubbo:service interface="com.atguigu.gmall.service.UserService" ref="userServiceImpl02" timeout="1000" version="2.0.0"> <dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method> </dubbo:service> <bean id="userServiceImpl02" class="com.atguigu.gmall.service.impl.UserServiceImpl2"></bean> <!-- 连接监控中心 --> <dubbo:monitor protocol="registry"></dubbo:monitor> </beans>
Author:
John Doe
Permalink:
http://yoursite.com/2019/03/14/Dubbo/尚硅谷 Dubbo 雷丰阳讲义/
License:
Copyright (c) 2019 CC-BY-NC-4.0 LICENSE
Slogan:
Do you believe in DESTINY?